home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / ddj0897.zip / DYN401.ZIP / dpp / ostream.c < prev    next >
C/C++ Source or Header  |  1997-04-16  |  15KB  |  680 lines

  1.  
  2.  
  3. /*  Copyright (c) 1993-1996 Algorithms Corporation  */
  4. /*  All rights reserved.  */
  5.  
  6.  
  7.  
  8.  
  9. /*  This file automatically generated by dpp - do not edit  */
  10.  
  11. #define    DPP_STRATEGY    2
  12. #define    DPP_FASTWIDE    0
  13.  
  14.  
  15.  
  16. #line 16 "ostream.d"
  17. #include <ctype.h> 
  18. #include <stdarg.h> 
  19. #include <string.h> 
  20.  
  21. #include "dpp.h" 
  22.  
  23.  
  24. #define CONVERT_SUPER 
  25.  
  26.  
  27. #define strne(a, b) strcmp(a, b) 
  28. #define streq(a, b) !strcmp(a, b) 
  29.  
  30. #define istart(x) (isalpha(x) || (x) == '_') 
  31. #define irest(x) (isalnum(x) || (x) == '_') 
  32.  
  33.  
  34. #ifdef unix 
  35. #define RMODE "r" 
  36. #define WMODE "w" 
  37. #else 
  38. #define RMODE "rt" 
  39. #define WMODE "wt" 
  40. #endif 
  41.  
  42. #define    CLASS    OutputStream_c
  43. #define    ivType    OutputStream_iv_t
  44.  
  45. #include "generics.h"
  46.  
  47. object    OutputStream_c;
  48.  
  49.  
  50. #line 51 "ostream.c"
  51. typedef struct  _OutputStream_iv_t  {
  52.     object iStream;
  53.     object iSFile;
  54.     object iTFile;
  55.     long iILine;
  56.     long iOLine;
  57.     long iRLine;
  58.     int iBraceLevel;
  59.     int iParenLevel;
  60.     int iBlbl;
  61.     char iPllc;
  62.     object iOutputList;
  63.     object iCVars;
  64.     object iIVars;
  65.     object iCName;
  66. }    OutputStream_iv_t;
  67.  
  68.  
  69. #line 62 "ostream.d"
  70. extern objrtn open_file(char *file,char *mode); 
  71.  
  72. extern int ErrorCode, LineDirectives; 
  73.  
  74.  
  75. cmeth objrtn OutputStream_cm_gNew(object self)
  76.     return gShouldNotImplement(self, "gNew"); 
  77.  
  78. cmeth objrtn OutputStream_cm_gNewWithStrStr(object self, char *file, char *ifile)
  79.     object obj = oSuper(OutputStream_c, gNew, self)(self); 
  80.     ivType *iv = ivPtr(obj); 
  81.     iv->iSFile = gNewWithStr(String, ifile); 
  82.     iv->iTFile = gNewWithStr(String, file); 
  83. #ifndef unix 
  84.     gToLower(iv->iSFile); 
  85.     gToLower(iv->iTFile); 
  86. #endif 
  87.     iv->iStream = file ? open_file(file, WMODE) : (object) NULL; 
  88.     iv->iOutputList = gNew(LinkList); 
  89.     iv->iRLine = iv->iOLine = 1L; 
  90.     iv->iPllc = ';'; 
  91.     return obj; 
  92.  
  93. static int sub(object tkn, object sym, object vars, char *exp) 
  94.     long line; 
  95.     if (!vars || !gFind(vars, sym)) 
  96.         return 0; 
  97.     line = gLineNumber(tkn); 
  98.     gAddBefore(tkn, gNewToken(Token, exp, line, 0)); 
  99.     gAddBefore(tkn, gNewToken(Token, "->", line, 0)); 
  100.     return 1; 
  101.  
  102. static int do_var_sub(ivType *iv) 
  103.     object tkn, sym; 
  104.     char *p, *pstr = NULL; 
  105.     int res = 0; 
  106.     char cvar[80]; 
  107.  
  108.     sprintf(cvar, "%s_cv", gStringValue(iv->iCName)); 
  109.     for (tkn = gFirst(iv->iOutputList) ; tkn ; tkn = gNext(tkn), pstr=p) { 
  110.         p = gStringValue(tkn); 
  111.         if (!istart(*p)) 
  112.             continue; 
  113.         if (!pstr || strne(pstr, "->") && strne(pstr, ".")) { 
  114.             sym = gToken(tkn); 
  115.             if (sub(tkn, sym, iv->iIVars, "iv")) 
  116.                 res = 1; 
  117.             else 
  118.                 sub(tkn, sym, iv->iCVars, cvar); 
  119.         } 
  120.     } 
  121.     return res; 
  122.  
  123. #ifdef CONVERT_SUPER 
  124.  
  125. #line 129 "ostream.d"
  126. static objrtn make_arg(object frst, object lst, int *simple) 
  127.     object arg; 
  128.     int pos; 
  129.     char *p1=NULL, *p2=NULL, *p3=NULL; 
  130.  
  131.     arg = gNew(LinkList); 
  132.     for (pos=0 ; frst != lst ; frst=gNext(frst)) { 
  133.         switch (++pos) { 
  134.             case 1: p1 = gStringValue(frst); break; 
  135.             case 2: p2 = gStringValue(frst); break; 
  136.             case 3: p3 = gStringValue(frst); break; 
  137.         } 
  138.         gAddLast(arg, gCopy(frst)); 
  139.     } 
  140.     *simple = pos == 1 && istart(*p1) || 
  141.         pos == 3 && streq(p1, "(") && istart(*p2) && 
  142.         streq(p3, ")"); 
  143.     return arg; 
  144.  
  145. #line 154 "ostream.d"
  146. #define OUTT(t) if (tkn) gAddBefore(tkn, t); else gAddLast(iv->iOutputList, t) 
  147.  
  148.  
  149.  
  150. static int convert_super(ivType *iv) 
  151.     object tkn; 
  152.     char *p, *pstr = NULL, *ppstr = NULL, *tp; 
  153.     int paren; 
  154.     object frst; 
  155.     object lst; 
  156.     object gen; 
  157.     object arg; 
  158.     object t; 
  159.     long line; 
  160.     int simple; 
  161.     char cname[80]; 
  162.  
  163.     for (tkn = gFirst(iv->iOutputList) ; tkn ; tkn=gNext(tkn), ppstr=pstr, pstr=p) { 
  164.         p = gStringValue(tkn); 
  165.         if (strne(p, "super")) 
  166.             continue; 
  167.         if (!pstr || strne(pstr, "(")) 
  168.             continue; 
  169.         if (!ppstr || !istart(*ppstr)) 
  170.             continue; 
  171.  
  172.         frst = gNext(tkn); 
  173.         if (!frst) 
  174.             continue; 
  175.  
  176.         line = gLineNumber(tkn); 
  177.  
  178.  
  179.         tp = gStringValue(frst); 
  180.         if (streq(tp, ",") || streq(tp, ")")) { 
  181.             t = gNewToken(Token, "self", line, 0); 
  182.             gAddBefore(frst, t); 
  183.             frst = t; 
  184.         } 
  185.  
  186.         paren = streq(gStringValue(frst), "("); 
  187.  
  188.  
  189.  
  190.         for (lst=frst ; 1 ; ) { 
  191.             lst = gNext(lst); 
  192.             if (!lst) 
  193.                 break; 
  194.             tp = gStringValue(lst); 
  195.             if (streq(tp, ")")) 
  196.                 paren--; 
  197.             else if (streq(tp, "(")) 
  198.                 paren++; 
  199.             if (streq(tp, ",") && !paren || paren < 0) 
  200.                 break; 
  201.         } 
  202.  
  203.  
  204.  
  205.         tkn = gPrevious(tkn); 
  206.         tkn = gPrevious(tkn); 
  207.  
  208.  
  209.  
  210.         gen = gCopy(tkn); 
  211.  
  212.  
  213.  
  214.         arg = make_arg(frst, lst, &simple); 
  215.  
  216.  
  217.  
  218.         for ( ; tkn != lst ; tkn = t) { 
  219.             t = gNext(tkn); 
  220.             gDispose(tkn); 
  221.         } 
  222.  
  223.  
  224.  
  225.         tkn = lst; 
  226.  
  227.  
  228.  
  229.         if (simple) { 
  230.             t = gNewToken(Token, "oSuper", line, 0); 
  231.             OUTT(t); 
  232.  
  233.             t = gNewToken(Token, "(", line, 0); 
  234.             OUTT(t); 
  235.  
  236.             sprintf(cname, "%s_c", gStringValue(iv->iCName)); 
  237.             t = gNewToken(Token, cname, line, 0); 
  238.             OUTT(t); 
  239.  
  240.             t = gNewToken(Token, ",", line, 1); 
  241.             OUTT(t); 
  242.  
  243.             OUTT(gen); 
  244.  
  245.             t = gNewToken(Token, ",", line, 1); 
  246.             OUTT(t); 
  247.  
  248.             for (t=gFirst(arg) ; t ; t=gNext(t)) 
  249.                 OUTT(gCopy(t)); 
  250.  
  251.             t = gNewToken(Token, ")", line, 0); 
  252.             OUTT(t); 
  253.  
  254.             t = gNewToken(Token, "(", line, 0); 
  255.             OUTT(t); 
  256.  
  257.             while (t = gFirst(arg)) { 
  258.                 gRemove(t); 
  259.                 OUTT(t); 
  260.             } 
  261.  
  262.             DISPOSE(arg); 
  263.  
  264.         } else { 
  265.             t = gNewToken(Token, "(", line, 0); 
  266.             OUTT(t); 
  267.  
  268.             t = gNewToken(Token, "_super_save_", line, 0); 
  269.             OUTT(t); 
  270.  
  271.             t = gNewToken(Token, "=", line, 0); 
  272.             OUTT(t); 
  273.  
  274.             t = gNewToken(Token, "(", line, 0); 
  275.             OUTT(t); 
  276.  
  277.             while (t = gFirst(arg)) { 
  278.                 gRemove(t); 
  279.                 OUTT(t); 
  280.             } 
  281.             DISPOSE(arg); 
  282.  
  283.             t = gNewToken(Token, ")", line, 0); 
  284.             OUTT(t); 
  285.  
  286.             t = gNewToken(Token, ",", line, 1); 
  287.             OUTT(t); 
  288.  
  289.             t = gNewToken(Token, "oSuper", line, 0); 
  290.             OUTT(t); 
  291.  
  292.             t = gNewToken(Token, "(", line, 0); 
  293.             OUTT(t); 
  294.  
  295.             sprintf(cname, "%s_c", gStringValue(iv->iCName)); 
  296.             t = gNewToken(Token, cname, line, 0); 
  297.             OUTT(t); 
  298.  
  299.             t = gNewToken(Token, ",", line, 1); 
  300.             OUTT(t); 
  301.  
  302.             OUTT(gen); 
  303.  
  304.             t = gNewToken(Token, ",", line, 0); 
  305.             OUTT(t); 
  306.  
  307.             t = gNewToken(Token, "_super_save_", line, 0); 
  308.             OUTT(t); 
  309.  
  310.             t = gNewToken(Token, ")", line, 0); 
  311.             OUTT(t); 
  312.  
  313.             t = gNewToken(Token, "(", line, 0); 
  314.             OUTT(t); 
  315.  
  316.             t = gNewToken(Token, "_super_save_", line, 0); 
  317.             OUTT(t); 
  318.  
  319.  
  320.  
  321.             paren = 1; 
  322.             while (paren && tkn) { 
  323.                 p = gStringValue(tkn); 
  324.                 if (streq(p, "(")) 
  325.                     paren++; 
  326.                 else if (streq(p, ")")) 
  327.                     paren--; 
  328.                 if (paren) 
  329.                     tkn = gNext(tkn); 
  330.             } 
  331.             if (!tkn) { 
  332.                 ErrorCode = 1; 
  333.                 vPrintf(stdoutStream, "Error on line %ld\n", line); 
  334.                 vPrintf(stdoutStream, "Expression containing super - bad syntax\n"); 
  335.             } 
  336.  
  337.             t = gNewToken(Token, ")", tkn ? gLineNumber(tkn) : line, 0); 
  338.             OUTT(t); 
  339.         } 
  340.  
  341.         return 1; 
  342.     } 
  343.     return 0; 
  344.  
  345. #endif 
  346.  
  347.  
  348.  
  349. imeth objrtn OutputStream_im_gFlush(object self)
  350. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  351.     int i, pp; 
  352.     object tkn; 
  353.     char *p=NULL, c=0; 
  354.  
  355.     if (!iv->iStream) 
  356.         return self; 
  357.  
  358.     if (iv->iIVars || iv->iCVars) 
  359.         do_var_sub(iv); 
  360.  
  361. #ifdef CONVERT_SUPER 
  362.         while (convert_super(iv)); 
  363. #endif 
  364.  
  365.         tkn = gFirst(iv->iOutputList); 
  366.     if (tkn && iv->iILine && iv->iOLine != iv->iILine) 
  367.         if (iv->iILine > iv->iOLine && iv->iILine < iv->iOLine+5) 
  368.         while (iv->iOLine != iv->iILine) { 
  369.         gPuts(iv->iStream, "\n"); 
  370.         iv->iOLine++; 
  371.         iv->iRLine++; 
  372.     } 
  373.     else 
  374.         gSLineDirective(self); 
  375.  
  376.     pp = tkn && *(p=gStringValue(tkn)) == '#'; 
  377.     if (tkn && !pp) 
  378.         for (i=iv->iBlbl-(*p == '}')+(*p != '{' && iv->iPllc != ';' && iv->iPllc != '{' && iv->iPllc != '}' && iv->iPllc != ':') ; i-- > 0 ; ) 
  379.         gPuts(iv->iStream, "\t"); 
  380.     for ( ; tkn ; tkn = gFirst(iv->iOutputList)) { 
  381.         p = gStringValue(tkn); 
  382.         if (irest(*p) && irest(c)) 
  383.             gPuts(iv->iStream, " "); 
  384.         gPuts(iv->iStream, p); 
  385.         if (gSpace(tkn)) { 
  386.             gPuts(iv->iStream, " "); 
  387.             c = 0; 
  388.         } else 
  389.             c = *p; 
  390.         iv->iPllc = *p; 
  391.         gDeepDisposeFirst(iv->iOutputList); 
  392.     } 
  393.     if (pp) 
  394.         iv->iPllc = ';'; 
  395.     gPuts(iv->iStream, "\n"); 
  396.     iv->iOLine++; 
  397.     iv->iRLine++; 
  398.     iv->iILine = 0L; 
  399.     iv->iBlbl = iv->iBraceLevel; 
  400.     return self; 
  401.  
  402.  
  403.  
  404. imeth objrtn OutputStream_im_gFlushm(object self)
  405. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  406.     int i; 
  407.     object tkn; 
  408.     char *p, c=0, *cname, ctype[80]; 
  409.  
  410.     if (!iv->iStream) 
  411.         return self; 
  412.  
  413. #define ADD(s, t) gAddAfter(tkn, gNewToken(Token, t, 0L, s)) 
  414.  
  415.         if ((iv->iIVars || iv->iCVars) && do_var_sub(iv)) { 
  416.         tkn = gFirst(iv->iOutputList); 
  417.         sprintf(ctype, "%s_iv_t", cname = gStringValue(iv->iCName)); 
  418.         ADD(0, ";"); 
  419.         ADD(0, ")"); 
  420.         ADD(0, "self"); 
  421.         ADD(1, ","); 
  422.         ADD(0, cname); 
  423.         ADD(0, "("); 
  424.         ADD(0, "GetIVs"); 
  425.         ADD(1, "="); 
  426.         ADD(1, "iv"); 
  427.         ADD(0, "*"); 
  428.         ADD(1, ctype); 
  429.     } 
  430.  
  431. #ifdef CONVERT_SUPER 
  432.         while (convert_super(iv)); 
  433. #endif 
  434.  
  435.         for (tkn=gFirst(iv->iOutputList) ; tkn ; tkn=gFirst(iv->iOutputList)) { 
  436.         iv->iILine = gLineNumber(tkn); 
  437.         if (iv->iILine && iv->iOLine != iv->iILine) { 
  438.             if (iv->iILine > iv->iOLine && iv->iILine < iv->iOLine+5) 
  439.                 while (iv->iOLine != iv->iILine) { 
  440.                 gPuts(iv->iStream, "\n"); 
  441.                 iv->iOLine++; 
  442.                 iv->iRLine++; 
  443.             } 
  444.             else 
  445.                 gSLineDirective(self); 
  446.             p = gStringValue(tkn); 
  447.             iv->iBlbl = iv->iBraceLevel; 
  448.             if (*p != '#') 
  449.                 for (i=iv->iBlbl-(*p == '}')+(*p != '{' && iv->iPllc != ';' && iv->iPllc != '{' && iv->iPllc != '}' && iv->iPllc != ':') ; i-- > 0 ; ) 
  450.                 gPuts(iv->iStream, "\t"); 
  451.         } else 
  452.             p = gStringValue(tkn); 
  453.  
  454.         if (irest(*p) && irest(c)) 
  455.             gPuts(iv->iStream, " "); 
  456.         gPuts(iv->iStream, p); 
  457.         iv->iPllc = c = *p; 
  458.         if (c == '(') 
  459.             iv->iParenLevel++; 
  460.         else if (c == ')') { 
  461.             if (iv->iParenLevel) 
  462.                 iv->iParenLevel--; 
  463.         } else if (c == '{') 
  464.             iv->iBraceLevel++; 
  465.         else if (c == '}') { 
  466.             if (iv->iBraceLevel) 
  467.                 iv->iBraceLevel--; 
  468.         } 
  469.         if (gSpace(tkn)) { 
  470.             gPuts(iv->iStream, " "); 
  471.             c = 0; 
  472.         } 
  473.         gDeepDisposeFirst(iv->iOutputList); 
  474.     } 
  475.     gPuts(iv->iStream, "\n"); 
  476.     iv->iOLine++; 
  477.     iv->iRLine++; 
  478.     iv->iILine = 0L; 
  479.     iv->iBlbl = iv->iBraceLevel; 
  480.     return self; 
  481.  
  482. imeth objrtn OutputStream_im_gDispose(object self)
  483. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  484.     gFlush(self); 
  485.     if (iv->iStream) 
  486.         gDispose(iv->iStream); 
  487.     gDispose(iv->iSFile); 
  488.     gDispose(iv->iTFile); 
  489.     gDeepDispose(iv->iOutputList); 
  490.     return oSuper(OutputStream_c, gDispose, self)(self); 
  491.  
  492. imeth objrtn OutputStream_im_gPut(object self, object tkn)
  493. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  494.     char c = *gStringValue(tkn); 
  495.     long ln = gLineNumber(tkn); 
  496.  
  497.     if (!iv->iStream) { 
  498.         DISPOSE(tkn); 
  499.         return self; 
  500.     } 
  501.  
  502.     if (!iv->iILine) 
  503.         iv->iILine = ln; 
  504.     else if (ln && iv->iILine != ln) { 
  505.         gFlush(self); 
  506.         iv->iILine = ln; 
  507.     } 
  508.  
  509.     gAddLast(iv->iOutputList, tkn); 
  510.     if (!ln && (!iv->iParenLevel && c == ';' || c == '}' || c == '{' || c == ':')) 
  511.         gFlush(self); 
  512.     if (c == '(') 
  513.         iv->iParenLevel++; 
  514.     else if (c == ')') { 
  515.         if (iv->iParenLevel) 
  516.             iv->iParenLevel--; 
  517.     } else if (c == '{') 
  518.         iv->iBraceLevel++; 
  519.     else if (c == '}') { 
  520.         if (iv->iBraceLevel) 
  521.             iv->iBraceLevel--; 
  522.     } 
  523.     return self; 
  524.  
  525.  
  526.  
  527. imeth objrtn OutputStream_im_gPutm(object self, object tkn)
  528. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  529.     if (iv->iStream) 
  530.         gAddLast(iv->iOutputList, tkn); 
  531.     else 
  532.         DISPOSE(tkn); 
  533.     return self; 
  534.  
  535. static int count_nl(char *s) 
  536.     int n = 0; 
  537.     for ( ; *s ; s++) 
  538.         if (*s == '\n') 
  539.         n++; 
  540.     return n; 
  541.  
  542. imeth int OutputStream_im_gPuts(object self, char *str)
  543. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  544.     iv->iOLine = -20L; 
  545.     iv->iRLine += count_nl(str); 
  546.     iv->iILine = 0L; 
  547.     return iv->iStream ? gPuts(iv->iStream, str) : strlen(str); 
  548.  
  549. ivmeth int OutputStream_ivm_vPrintf(object self, va_list _rest_)
  550. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);char * fmt = va_arg(_rest_, char *);
  551.     char buf[256]; 
  552.     MAKE_REST(fmt); 
  553.  
  554.     vsprintf(buf, fmt, _rest_); 
  555.     iv->iOLine = -20L; 
  556.     iv->iRLine += count_nl(buf); 
  557.     iv->iILine = 0L; 
  558.     return iv->iStream ? gPuts(iv->iStream, buf) : strlen(buf); 
  559.  
  560. #line 582 "ostream.c"
  561.  
  562. static    int    OutputStream_ifm_vPrintf(object self, ...)
  563. {
  564.     va_list    _rest_;
  565.     va_start(_rest_, self);
  566.     return OutputStream_ivm_vPrintf(self, _rest_);
  567. }
  568.  
  569.  
  570.  
  571. #line 579 "ostream.d"
  572. imeth objrtn OutputStream_im_gSetOSVars(object self, object cname, object cvs, object ivs)
  573. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  574.     iv->iCName = cname; 
  575.     iv->iCVars = gSize(cvs) ? cvs : (object) NULL; 
  576.     iv->iIVars = gSize(ivs) ? ivs : (object) NULL; 
  577.     return self; 
  578.  
  579. imeth objrtn OutputStream_im_gTLineDirective(object self)
  580. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  581.     if (iv->iStream && LineDirectives) { 
  582.         iv->iRLine += 2; 
  583.         iv->iOLine = -20L; 
  584.         vPrintf(iv->iStream, "\n#line %ld \"%s\"\n", iv->iRLine, gStringValue(iv->iTFile)); 
  585.     } 
  586.     return self; 
  587.  
  588. imeth objrtn OutputStream_im_gSLineDirective(object self)
  589. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  590.     if (iv->iStream) { 
  591.         if (LineDirectives && iv->iILine) { 
  592.             vPrintf(iv->iStream, "\n#line %ld \"%s\"\n", iv->iILine, gStringValue(iv->iSFile)); 
  593.             iv->iRLine += 2; 
  594.             iv->iOLine = iv->iILine; 
  595.         } else { 
  596.             gPuts(iv->iStream, "\n"); 
  597.             iv->iRLine++; 
  598.             iv->iOLine = iv->iILine ? iv->iILine : -20L; 
  599.         } 
  600.     } 
  601.     return self; 
  602.  
  603. imeth objrtn OutputStream_im_gForceLineDirective(object self)
  604. { OutputStream_iv_t *iv = GetIVs(OutputStream, self);
  605.     iv->iOLine = -20L; 
  606.     return self; 
  607.  
  608.  
  609. #line 635 "ostream.c"
  610.  
  611. objrtn    OutputStream_initialize(void)
  612. {
  613.     static  CRITICALSECTION  cs;
  614.     static  int volatile once = 0;
  615.  
  616.     ENTERCRITICALSECTION(_CI_CS_);
  617.     if (!once) {
  618.         INITIALIZECRITICALSECTION(cs);
  619.         once = 1;
  620.     }
  621.     LEAVECRITICALSECTION(_CI_CS_);
  622.  
  623.     ENTERCRITICALSECTION(cs);
  624.  
  625.     if (OutputStream_c) {
  626.         LEAVECRITICALSECTION(cs);
  627.         return OutputStream_c;
  628.     }
  629.     INHIBIT_THREADER;
  630.     OutputStream_c = gNewClass(Class, "OutputStream", sizeof(OutputStream_iv_t), 0, END);
  631.     cMethodFor(OutputStream, gNew, OutputStream_cm_gNew);
  632.     cMethodFor(OutputStream, gNewWithStrStr, OutputStream_cm_gNewWithStrStr);
  633.     iMethodFor(OutputStream, gFlush, OutputStream_im_gFlush);
  634.     iMethodFor(OutputStream, gPuts, OutputStream_im_gPuts);
  635.     iMethodFor(OutputStream, gPutm, OutputStream_im_gPutm);
  636.     iMethodFor(OutputStream, gForceLineDirective, OutputStream_im_gForceLineDirective);
  637.     iMethodFor(OutputStream, gDispose, OutputStream_im_gDispose);
  638.     iMethodFor(OutputStream, gPut, OutputStream_im_gPut);
  639.     iMethodFor(OutputStream, gSLineDirective, OutputStream_im_gSLineDirective);
  640.     iMethodFor(OutputStream, gFlushm, OutputStream_im_gFlushm);
  641.     ivMethodFor(OutputStream, vPrintf, OutputStream_ivm_vPrintf, OutputStream_ifm_vPrintf);
  642.     iMethodFor(OutputStream, gSetOSVars, OutputStream_im_gSetOSVars);
  643.     iMethodFor(OutputStream, gTLineDirective, OutputStream_im_gTLineDirective);
  644.     iMethodFor(OutputStream, gDeepDispose, OutputStream_im_gDispose);
  645.  
  646.     ENABLE_THREADER;
  647.  
  648.     LEAVECRITICALSECTION(cs);
  649.  
  650.     return OutputStream_c;
  651. }
  652.  
  653.  
  654.  
  655.